package com.gmall.model.search;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;

// Index = goods , Type = info  es 7.8.0 逐渐淡化type！  修改！

/**
 * @Document(indexName = "goods" , shards = 3,replicas = 2)
 * indexName:索引库的名称
 * shards：分片，分几份存储
 * replicas：副本 （备份几份）
 * 共分片： 1分片 2副本 *3=9
 *
 * @Id:
 *    mysql:一行数据叫记录 记录之间通过id区分唯一
 *    es: 一行数据叫文档  文档通过id区分
 *
 * 分词类型：
 *    Keyword:字符串类型  不分词
 *    text:字符串类型  分词
 *    基本数据类型:long double integer
 *
 * 索引：
 *  es默认将对所有的数据进行索引
 * index = false:表示不进行索引
 *index 默认值为true
 *
 * 分词器：
 *  analyzer = "ik_max_word"：索引的使用使用细粒度 全面
 *  searchAnalyzer ="ik_smart" 检索的时候使用粗粒度 精准
 *
 *FieldType.Nested：
 *
 *  默认object类型嵌套类型父子关系的类型 存储es中会进行扁平化处理
 *
 *  netsted:可以依原来的结构进行索引和检索
 *   对象数组可以彼此独力地进行索引和检索
 *
 *   索引：默认
 *   分词：text keyword
 *   存储：默认都是存储
 *
 */
@Data
@Document(indexName = "goods" , shards = 3,replicas = 1)
public class Goods {
    // 商品Id skuId
    @Id
    private Long id;

    @Field(type = FieldType.Keyword, index = false)
    private String defaultImg;

    //  es 中能分词的字段，这个字段数据类型必须是 text！keyword 不分词！
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String title;

    @Field(type = FieldType.Double)
    private Double price;

    //  @Field(type = FieldType.Date)   6.8.1
    @Field(type = FieldType.Date,format = DateFormat.custom,pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime; // 新品

    @Field(type = FieldType.Long)
    private Long tmId;

    @Field(type = FieldType.Keyword)
    private String tmName;

    @Field(type = FieldType.Keyword)
    private String tmLogoUrl;

    @Field(type = FieldType.Long)
    private Long category1Id;

    @Field(type = FieldType.Keyword)
    private String category1Name;

    @Field(type = FieldType.Long)
    private Long category2Id;

    @Field(type = FieldType.Keyword)
    private String category2Name;

    @Field(type = FieldType.Long)
    private Long category3Id;

    @Field(type = FieldType.Keyword)
    private String category3Name;

    //  商品的热度！ 我们将商品被用户点查看的次数越多，则说明热度就越高！
    @Field(type = FieldType.Long)
    private Long hotScore = 0L;

//    // 平台属性集合对象
//    // Nested 支持嵌套查询
//    @Field(type = FieldType.Nested)
//    private List<SearchAttr> attrs;

}
